package com.damie.controller;


import com.damie.common.commonutils.R;
import com.damie.common.jwtuilts.JwtUtil;
import com.damie.domain.UserAddress;
import com.damie.dto.UserAddressDto;
import com.damie.paramer.UserAddressParame;
import com.damie.paramer.UserAddressParameup;
import com.damie.service.UserAddressService;
import io.jsonwebtoken.Claims;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.http.HttpRequest;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.InvocationTargetException;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author Alon
 * @since 2021-01-19
 */
@Api
@RestController
@CrossOrigin("*")
@RequestMapping("/user/address")
public class UserAddressController {

    @Resource
    private UserAddressService service;
    /**
     * @描述 当前用户新增地址,
     * 当前端加入了addressStetus参数并为默认地址1时，当前新增的地址为1其他改为2
     * @param userAddressParame 用户新增地址参数对象
     * @return 新增成功的地址
     */
    @ApiModelProperty("用户新增地址")
    @PostMapping("add")
    public R addAddress(@RequestBody UserAddressParame userAddressParame, HttpServletRequest request) throws Exception {
        UserAddressDto userAddressDto = service.addAddress(userAddressParame, request);
        return R.ok().message("新增成功").data("address",userAddressDto);
    }
    @ApiOperation(value = "用户修改地址")
    @PostMapping("updateAddress")
    public R updateAddress(@RequestBody UserAddressParameup userAddressParameup, HttpServletRequest request) throws Exception {

        UserAddressDto userAddressDto = service.updateAddress(userAddressParameup, request);
        return R.ok().message("新增成功").data("address",userAddressDto);
    }
    /**
     * @描述 查询当前用户的地址
     * @return 所有当前用户的地址信息
     */
    @ApiModelProperty("查询用户地址")
    @GetMapping("queryByUser")
    public R queryAll(HttpServletRequest request){
        List<UserAddressDto> userAddressDtos = service.queryByUser(request);
        return R.ok().message("查询成功").data("userList",userAddressDtos);
    }
    /**
     * @描述 查询当前用户的地址
     * @return 当前用户的选择的地址信息
     */
    @ApiModelProperty("查询用户地址")
    @GetMapping("queryById")
    public R queryById(String addressId){
        UserAddressDto userAddressDtos = service.queryById(addressId);
        return R.ok().message("查询成功").data("userAddress",userAddressDtos);
    }
    /**
     * @描述 修改当前用户的地址为默认地址1其他修改为2
     * @param addressId 用户修改的当前备用地址为默认地址1
     * @return 返回修改成功的所有结果
     */
    @ApiModelProperty("用户修改默认地址")
    @GetMapping("updateByUser")
    public R updateByUser(String addressId,HttpServletRequest request){
        List<UserAddress> userAddressDto = service.updateByUser(addressId,request);
        return R.ok().message("修改成功").data("userList",userAddressDto);
    }
    /**
     * @描述 删除当前用户的地址，
     * 当当前删除的地址为默认地址1时，随机选择一个该用户的地址为默认地址
     * @param addressId 用户删除的当前备用地址为默认地址1
     * @return 返回删除成功的所有结果
     */
    @ApiModelProperty("用户删除自己的地址")
    @GetMapping("deleteByUser")
    public R deleteByUser(String addressId,HttpServletRequest request){
        UserAddress userAddressDto = service.deleteByUser(addressId,request);
        return R.ok().message("删除成功").data("userAddress",userAddressDto);
    }
}

